package br.ufpi.esii.reqg.entities;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
public class CasoDeUso extends Item {

	@ManyToMany
	private Set<Ator> atores;

	@ManyToMany
	@JoinColumn( nullable = false )
	private Set<Requisito> requisitos;

	@OneToOne( cascade = CascadeType.ALL, optional = false, fetch = FetchType.EAGER )
	private Fluxo fluxoPrincipal;

	@OneToMany( cascade = CascadeType.ALL )
	private Set<SubFluxo> subFluxos;

	@OneToMany( cascade = CascadeType.ALL )
	@JoinColumn( nullable = false )
	private Set<FluxoAlternativo> fluxosAlternativos;

	@OneToMany( mappedBy = "casoDeUso", cascade = CascadeType.ALL )
	private Set<Prototipo> prototipos;

	public CasoDeUso() {
		super();
	}

	public Set<Requisito> getRequisitos() {
		return requisitos;
	}

	public void setRequisitos( Set<Requisito> requisitos ) {
		this.requisitos = requisitos;
	}

	public Fluxo getFluxoPrincipal() {
		return fluxoPrincipal;
	}

	public void setFluxoPrincipal( Fluxo fluxoPrincipal ) {
		this.fluxoPrincipal = fluxoPrincipal;
	}

	public Set<SubFluxo> getSubFluxos() {
		return subFluxos;
	}

	public void setSubFluxos( Set<SubFluxo> subFluxos ) {
		this.subFluxos = subFluxos;
	}

	public Set<FluxoAlternativo> getFluxosAlternativos() {
		return fluxosAlternativos;
	}

	public void setFluxosAlternativos( Set<FluxoAlternativo> fluxosAlternativos ) {
		this.fluxosAlternativos = fluxosAlternativos;
	}

	public Set<Prototipo> getPrototipos() {
		return prototipos;
	}

	public void setPrototipos( Set<Prototipo> prototipos ) {
		this.prototipos = prototipos;
	}

	public Set<Ator> getAtores() {
		return atores;
	}

	public void setAtores( Set<Ator> atores ) {
		this.atores = atores;
	}

}
